package com.ruitaowang.core.utils;

//import sun.misc.BASE64Decoder;
//import sun.misc.BASE64Encoder;

import java.io.*;
import java.net.URI;
import java.net.URLConnection;
import java.util.Base64;

/**
 * 图片工具类
 * <p/>
 * Created by neal on 11/27/16.
 */
public final class ImageUtils {

//    /**
//     * @Descriptionmap 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
//     * @param path 图片路径
//     * @return
//     */
//    public static String imageToBase64(String path) {// 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
//        byte[] data = null;
//        // 读取图片字节数组
//        try {
//            InputStream in = new FileInputStream(path);
//            data = new byte[in.available()];
//            in.read(data);
//            in.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        // 对字节数组Base64编码
//        BASE64Encoder encoder = new BASE64Encoder();
//        return encoder.encode(data);// 返回Base64编码过的字节数组字符串
//    }

    /**
     * @Descriptionmap 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
     * @param destUrl 图片路径
     * @return
     */
    public static String imageToBase64FromRemote(String destUrl) {// 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
        URI uri = null;
        byte[] data = null;
        URLConnection connection = null;// 获取URLConnection对象
        BufferedInputStream in = null;
        ByteArrayOutputStream out = null;
        try {
            uri = new URI(destUrl);// 创建URI对象
            connection = uri.toURL().openConnection();
            in = new BufferedInputStream(connection.getInputStream());
            out = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
            data = out.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {}
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                }
            }
        }
        // 对字节数组Base64编码
//        BASE64Encoder encoder = new BASE64Encoder();
//        return encoder.encode(data);// 返回Base64编码过的字节数组字符串
        return Base64.getEncoder().encodeToString(data);

    }

//    /**
//     * @Descriptionmap 对字节数组字符串进行Base64解码并生成图片
//     * @author temdy
//     * @param base64 图片Base64数据
//     * @param path 图片路径
//     * @return
//     */
//    public static boolean base64ToImage(String base64, String path) {// 对字节数组字符串进行Base64解码并生成图片
//        if (base64 == null){ // 图像数据为空
//            return false;
//        }
//        BASE64Decoder decoder = new BASE64Decoder();
//        try {
//            // Base64解码
//            byte[] bytes = decoder.decodeBuffer(base64);
//            for (int i = 0; i < bytes.length; ++i) {
//                if (bytes[i] < 0) {// 调整异常数据
//                    bytes[i] += 256;
//                }
//            }
//            // 生成jpeg图片
//            OutputStream out = new FileOutputStream(path);
//            out.write(bytes);
//            out.flush();
//            out.close();
//            return true;
//        } catch (Exception e) {
//            return false;
//        }
//    }

    public static void main(String[] args) {
//        String img = "";
//        img = img.replace("data:image/jpeg;base64,","");
//        System.out.println(img.length());
//        base64ToImage(img, "/Users/neal/work/base.jpg");

        String url = "http://static.ruitaowang.com/qr/qr_1_83.png";
//        String url = "http://preview.quanjing.com/imageclk007/ic01700997.jpg";
        String str = imageToBase64FromRemote(url);	//读取输入流,转换为Base64字符
        System.out.println("data:image/png;base64,"+str);
    }
}